package com.itheima.mobilesafe69.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.xmlpull.v1.XmlSerializer;

import android.app.ProgressDialog;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Xml;
import android.widget.ProgressBar;

public class SmsUtil {
	private static Cursor cursor;
	private static FileOutputStream fos;
	private static int index = 0;
	/**
	 * @param path	备份到的文件路径
	 * @param ctx 	上下文环境
	 * @param pd	显示进度条的对话框
	 */
	public static void backUp(String path,Context ctx,SmsCallBack callBack) {
		//1,在指定路径下去创建文件
		File file = new File(path);
		try {
			fos = new FileOutputStream(file);
			
			//2,准备要备份的数据,内容解析者要上下文环境
			cursor = ctx.getContentResolver().query(Uri.parse("content://sms/"), 
					new String[]{"address","date","type","body"}, 
					null, null, null);
			
			//(A,设置对话框的总进度)
			//(B,设置进度条的总进度)
			
			//设置对话框中进度条100%短信条数
//			pd.setMax(cursor.getCount());
			
			if(callBack!=null){
				callBack.setMax(cursor.getCount());
			}
			
			//3,获取xml的序列化器,做写入xml节点操作
			XmlSerializer newSerializer = Xml.newSerializer();
			//向那个文件写入数据
			newSerializer.setOutput(fos,"utf-8");
			newSerializer.startDocument("utf-8", true);
			//设置跟节点(名空间,名称)
			newSerializer.startTag(null, "smss");
			while(cursor.moveToNext()){
				//在循环遍历过程中,获取每一条短信,四个字段,对应着就是xm中的一个节点
				newSerializer.startTag(null, "sms");
				
				newSerializer.startTag(null, "address");
				if(!TextUtils.isEmpty(cursor.getString(0))){
					newSerializer.text(cursor.getString(0));
				}
				newSerializer.endTag(null, "address");
				
				newSerializer.startTag(null, "date");
				if(!TextUtils.isEmpty(cursor.getString(1))){
					newSerializer.text(cursor.getInt(1)+"");
				}
				newSerializer.endTag(null, "date");
				
				newSerializer.startTag(null, "type");
				if(!TextUtils.isEmpty(cursor.getString(2))){
					newSerializer.text(cursor.getInt(2)+"");
				}
				newSerializer.endTag(null, "type");
				
				newSerializer.startTag(null, "body");
				if(!TextUtils.isEmpty(cursor.getString(3))){
					newSerializer.text(cursor.getString(3));
				}
				newSerializer.endTag(null, "body");
				newSerializer.endTag(null, "sms");
				
				//叠加进度条百分比
				index++;
				
				//(A,设置对话框的当前进度)
				//(B,设置进度条的当前进度)
				
//				pd.setProgress(index);
				if(callBack!=null){
					callBack.setProgress(index);
				}
				
				Thread.sleep(50);
			}
			newSerializer.endTag(null, "smss");
			newSerializer.endDocument();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if(cursor!=null && fos!=null){
					cursor.close();
					fos.flush();
					fos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	//回调(智慧北京	下拉刷新,上拉加载)
	//在此回调中有两个需求(设置总进度,设置当前进度)
	
	//1,定义一个接口
	//2,定义业务逻辑的抽象2个方法
	//3,传递一个实现了第一步接口的实现类的对象进来(实现了未实现的抽象方法(将抽象的逻辑具体话))
	//4,在合适的地方去调用实现类对象中,已经实现好的方法
	
	public interface SmsCallBack{
		//1,设置总进度方法
		public void setMax(int max);
		//2,设置当前进度的方法
		public void setProgress(int progress);
	}
}
